//$Id:AbstractJdbcDAO.java 2010-1-4 下午02:35:22
package com.walllee.core.dao;

import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

import com.walllee.core.util.PageUtil;

/**
 * 抽象的JdbcDAO类，对接口的部分方法进行了实现
 *
 * @author Wall.Lee(xiaoshan2242@gmail.com)
 */
public abstract class AbstractJdbcDAO extends JdbcDaoSupport implements JdbcDAO{
	private Log log = LogFactory.getLog(AbstractJdbcDAO.class);
	
	/**
	 * 获取数据库中指定序列的值
	 * @param sequenceName
	 * @return
	 */
	public abstract String getIdentity(String sequenceName);
	
	/* (non-Javadoc)
	 * @see com.walllee.core.dao.JdbcDAO#query(java.lang.String, java.lang.Object[])
	 */
	@SuppressWarnings("unchecked")
	@Override
	public List query(String sql, Object[] parameters) {
		if ( log.isDebugEnabled()) {
			log.info("query SQL:" + sql );
		}
		return this.getJdbcTemplate().queryForList(sql, parameters);
	}

	/* (non-Javadoc)
	 * @see com.walllee.core.dao.JdbcDAO#save(java.lang.String, java.lang.Object[])
	 */
	@Override
	public int save(String sql, Object[] parameters) {
		if ( log.isDebugEnabled()) {
			log.info("save SQL:" + sql );
		}
		return this.getJdbcTemplate().update(sql, parameters) ;
	}

	/* (non-Javadoc)
	 * @see com.walllee.core.dao.JdbcDAO#update(java.lang.String, java.lang.Object[])
	 */
	@Override
	public int update(String sql, Object[] parameters) {
		if ( log.isDebugEnabled()) {
			log.info("update SQL:" + sql );
		}
		return this.getJdbcTemplate().update(sql, parameters) ;
	}
	
	/**
	 * 获取记录的总数
	 * @param sql
	 * @param parameters
	 * @return
	 */
	public int queryForRowCount(String sql , Object[] parameters){
		String _sql = sql ;
		_sql = PageUtil.getRecordCountSql(sql) ;
		
		if ( log.isDebugEnabled()) {
			log.info("queryForRowCount SQL:" + sql );
		}
		
		return this.getJdbcTemplate().queryForInt(_sql, parameters) ;
	}
	
	/**
	 * 根据给定的sql语句来执行
	 * @param sql
	 * @param parameters
	 */
	public void execute(String sql , Object[] parameters){
		if ( log.isDebugEnabled()) {
			log.info("execute SQL:" + sql );
		}
		this.getJdbcTemplate().update(sql, parameters) ;
	}
}
